/* Bagian 1. ADT System Modus 1 : Load, Save, AddSite, CreateTable */

/* File			: MSystem.h																						 */
/* Deskripsi	: type dan prototype ADT. system; Bagian 1. ADT System Modus 1 : Load, Save, AddSite, CreateTable*/
/* Isi			: deklarasi konstanta, type dan prototype														 */

/* ADT system */

#ifndef MSystem_H
#define MSystem_H

#include "../system.h"

/*  Kamus Umum */

/* Bagian I : berisi deklarasi konstanta */

/* Bagian II : berisi deklarasi type */

/* Bagian III : berisi deklarasi prototype prosedur & fungsi */
/*				yg merupakan primitif type tsb */
	void DestroyNODELIST(); //Membebaskan semua penggunaan memori pada NODELIST dan membuatnya menjadi baru
	void DestroyEDGESLIST(); //Membebaskan semua penggunaan memori pada EDGELIST dan membuatnya menjadi baru
	void DestroyTABELMHS(); //Membebaskan semua penggunaan memori terkait TABELMHS dan membuatnya menjadi baru
	void DestroyTABELMK(); //Membebaskan semua penggunaan memori terkait TABELMK dan membuatnya menjadi baru
	void DestroyTABELPMK(); //Membebaskan semua penggunaan memori terkait TABELPMK dan membuatnya menjadi baru
	void DestroyAll(); //Membebaskan semua penggunaan memori terkait LINKEDLIST dan membuatnya menjadi baru
	
	void IshLoad (Reader CReader);
		/* Memeriksa apakah command dalam Modus Persiapan yang diketikan adalah Load
		   dengan prekondisi karakter pertama perintah adalah karakter 'L' atau 'l' */
		/* Kesalahan yang dapat ditoleransi adalah hilangnya salah satu huruf atau
		   tertukarnya urutan dua huruf yang berurutan
		   serta adanya penambahan huruf di bagian akhir */
	void Load (string FileName);
		/* Modus Persiapan : Load */
		/* Mengeksekusi semua hal yang dilakukan dalam command Load sesuai dengan spek soal */
		/* Dalam satu tabel yang berada di node yang sama tidak dimungkinkan adanya dua record atau lebih
		   yang memiliki key yang sama */
		/* Jika key sama, maka seluruh isi record harus identik */
	void LoadNodes(int JumlahLokasi, FILE *f, bool *FatalErr, int *RE, bool *enter);
		/* Load @nodes */
	void ChangeTableAvailability(nodeAddress P, bool *hasTMhs_baru, bool *hasTMK_baru, bool *hasTPMK_baru,								   FILE *F, bool *FatalErr, int *RE, bool *enter);
		/* Mengganti Availability Tabel dari P */
	void ReLoad (string FileName, bool *FatalErr, int *RE);
		/* Me-Load ulang TPMK */
	void LoadTPMK(FILE *f, string NamaNode, bool *FatalErr, int *RE);
		/* Mengedit TPML */
	void IshEdges(FILE *f, bool *FatalErr, bool *enter);
		/* Mengecek @edges */
	void LoadEdges(FILE *f, bool *FatalErr, bool *enter);
		/* Load @edges */

#endif
